package Modelo;

import java.util.*;

public class AgujeroNegro extends Thread implements Bloque {

	private boolean vivo;
	private boolean esFirme;
	private Mapa mapa;
	private Collection<Bloque> bloquesQueChupa;
	
	public AgujeroNegro(Mapa mapa){
		vivo=true;
		esFirme = false;
		this.mapa=mapa;
	}
	/**
	 *Al alojar un personaje, tambien lo mata
	 *@param Personaje
	 * */
	public void alojar(Personaje unPersonaje) {
		unPersonaje.morir();
	}

	/**
	 * Por el momento no va a desalojar a ningun
	 * Personaje que fue tragado
	 * @param unPersonaje 
	 * */
	public void desalojar(Personaje unPersonaje) {
		// por el momento no desaloja nada
	}

	/**
	 * Inidica si el Agujero negro es firme
	 * @return boolean
	 * */
	public boolean esFirme() {
		return this.esFirme;
	}

	/**
	 * Indica si un Personaje fue tragado por el Agujero Negro
	 * @param Personaje
	 * @return boolean
	 * */
	public boolean estaAlojado(Personaje unPersonaje) {
		return false;
	}

	public void destruir(){
		vivo=false;	// para matar el hilo
		mapa.ModificarBloquePor(this,new Vacio(mapa));	
	}
	
	public Numeros velocidadFinal(Numeros velocidad){
		return velocidad;
	}
	
	public void run(){
		bloquesQueChupa= mapa.getbloquesANDistanciaDe(this,Constantes.bloquesChupadosPorAgujero);
		Iterator<Bloque> itBloque = bloquesQueChupa.iterator();
		while(vivo){
			while (itBloque.hasNext()){	// barro los bloques
				Bloque bloque=itBloque.next();
				Collection<Personaje> huespedes=bloque.getAlojados();
				if(huespedes!=null){
					Iterator<Personaje> itPersonaje = huespedes.iterator();
					while (itPersonaje.hasNext()){ // barro las victimas
						Personaje victima= itPersonaje.next();
						bloque.desalojar(victima);
						victima.morir();
					}
				}
			}
			
		}
	}
	
	public Collection<Personaje> getAlojados() {
		return null;
	}
	public void atacar(Numeros potenciaDelAtaque) {
		
	}
}
